#include <fstream>
#include <iostream>
#include <limits>   // 用于 std::numeric_limits
#include <fstream>  // 用于 std::ifstream

void update_record(std::fstream& file, std::streampos position, const std::string& data) {
    if (!file.is_open()) return;

    // 移动到指定位置
    file.seekp(position);

    // 写入新数据
    file.write(data.c_str(), data.length());
}
void process_file(std::ifstream& file) {
    if (!file) {
        std::cerr << "文件打开失败！" << std::endl;
        return;
    }

    std::string line;
    while (std::getline(file, line)) {
        if (file.bad()) {
            std::cerr << "读取过程中发生硬件错误！" << std::endl;
            break;
        }
        if (file.fail()) {
            std::cerr << "数据格式错误或其他可恢复错误！" << std::endl;
            file.clear(); // 清除错误标志
            file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略错误行
            continue;
        }
        // 处理读取的行
        std::cout << "读取内容：" << line << std::endl;
    }
}
int main() {
    // 打开测试文件
    std::string filename = "test_file.txt";

    // 创建并写入初始数据到文件
    std::ofstream out_file(filename);
    if (out_file.is_open()) {
        out_file << "这是第一行文本\n";
        out_file << "这是第二行文本\n";
        out_file << "这是第三行文本\n";
        out_file.close();
    } else {
        std::cerr << "无法创建文件！" << std::endl;
        return 1;
    }

    // 测试 process_file 函数
    std::ifstream in_file(filename);
    if (in_file.is_open()) {
        std::cout << "开始读取文件内容：" << std::endl;
        process_file(in_file);
        in_file.close();
    } else {
        std::cerr << "无法打开文件进行读取！" << std::endl;
        return 1;
    }

    // 打开文件以更新某个记录（例如第二行开头的位置）
    std::fstream file(filename, std::ios::in | std::ios::out);
    if (file.is_open()) {
        std::cout << "开始更新文件内容：" << std::endl;
        std::streampos pos = 22;  // 第二行的起始位置（假设换行符占一个字符）
        update_record(file, pos, "更新后的内容");
        file.close();
    } else {
        std::cerr << "无法打开文件进行写入！" << std::endl;
        return 1;
    }

    // 再次读取文件，确保更新已生效
    std::ifstream check_file(filename);
    if (check_file.is_open()) {
        std::cout << "更新后读取文件内容：" << std::endl;
        process_file(check_file);
        check_file.close();
    } else {
        std::cerr << "无法打开文件进行验证！" << std::endl;
        return 1;
    }

    return 0;
}